【SpringBoot】四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

您所在的位置:网站首页 spring boot jar 【SpringBoot】四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

【SpringBoot】四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

2024-06-12 18:06| 来源: 网络整理| 查看: 265

本文摘要:四种读取 Spring Boot 项目中 jar 包中的 resources 目录下的文件

在这里插入图片描述

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号:洲与AI。 🤓 欢迎大家关注!我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。 🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入我的社群~社群中将不定时分享各类福利 🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此即可获得联系方式~

本文目录 前言代码一:getResourceAsStream()方法代码二: T.class..getResourceAsStream() 方法代码三:ClassPathResource 方法代码四:使用@Value注解注入总结

前言

在SpringBoot应用中,经常需要读取打包在jar包中的资源文件,比如配置文件、模板文件等。这些资源文件通常放在src/main/resources目录下,在打包成jar包后,它们会被存储在jar包的根目录下。本文将介绍4种在SpringBoot中读取这些资源文件的方法。

部署后,项目是通过打成 jar 包运行的,里面的文件是没有实际路径的(只有相对于项目名的相对路径)。 在这里插入图片描述

代码一:getResourceAsStream()方法

这是一个公共方法,用来读取文件中的内容的方法,通过T.class.getClassLoader().getResourceAsStream() 方法。

比如要读取 config 文件夹下的 test.properties 文件:

public static void printFileContent(Object obj) throws IOException { if (null == obj) { throw new RuntimeException("参数为空"); } BufferedReader reader = null; // 如果是文件路径 if (obj instanceof String) { reader = new BufferedReader(new FileReader(new File((String) obj))); // 如果是文件输入流 } else if (obj instanceof InputStream) { reader = new BufferedReader(new InputStreamReader((InputStream) obj)); } String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); }

此方法是从 classpath 路径(即:src 或 resources 路径下)下查找文件的,所以,路径前不需要加 “/”。

读取方法:

public class ResourceUtil { public void getResource(String fileName) throws IOException{ InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName); printFileContent(in); } public static void main(String[] args) throws IOException { new ResourceUtil().getResource("config/test.properties"); } }

在这里插入图片描述

代码二: T.class…getResourceAsStream() 方法 public void getResource2(String fileName) throws IOException{ InputStream in = this.getClass().getResourceAsStream("/" + fileName); printFileContent(in); } public static void main(String[] args) throws IOException { new ResourceUtil().getResource2("config/test.properties"); }

本方法是从 classpath 路径(即:src 或 resources 路径下)下查找文件的,但它的路径前需要加 “/” ,这个是跟读取的文件与当前.class 文件的位置有关。

可以看看编译后的文件路径: 在这里插入图片描述 当前文件 ResourceUtil.class 与要加载的文件 test.properties 的位置如上: test.properties 和 ResourceUtil.class 不在同一个文件夹下,所以读取的时候是要带上相对路径的,那么,这会有两种情况:

如果 test.properties 和 ResourceUtil 在同一个文件夹下,那么:this.getClass().getResourceAsStream(“test.properties”)

如果 test.properties 和 ResourceUtil 不在同一个文件夹下,那么:this.getClass().getResourceAsStream(“/config/test.properties”)

代码三:ClassPathResource 方法 public void getResource3(String fileName) throws IOException{ ClassPathResource classPathResource = new ClassPathResource(fileName); printFileContent(classPathResource.getInputStream()); } public static void main(String[] args) throws IOException { new ResourceUtil().getResource3("config/test.properties"); } 代码四:使用@Value注解注入

SpringBoot提供了@Value注解,它可以用来注入配置文件中的值,包括从jar包中的资源文件中读取。

import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class ConfigPropertiesReader { @Value("${app.config.value}") private String configValue; public void printConfigValue() { System.out.println("Config Value: " + configValue); } }

在application.properties或application.yml文件中,可以这样指定资源文件的位置:

app.config.value=classpath:config.properties 总结

Hello,各位看官老爷们好,洲洲已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。

📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。

📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体变现、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个技术大佬!也随时欢迎您跟我沟通,一起交流,一起成长。变现、进步、技术、资料、项目、你想要的这里都会有

📝欢迎您加入社群~一个人可以或许可以走的很快,但一群人将走的更远!

📝关注我的公众号(与CSDN同ID:洲与AI)可以获得一份Java 10万字面试宝典及相关资料!~

📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3